sync: Started transition to --content being enabled by default
authorJoey Hess <joeyh@joeyh.name>
Wed, 17 May 2023 17:23:42 +0000 (13:23 -0400)
committerJoey Hess <joeyh@joeyh.name>
Wed, 17 May 2023 17:23:42 +0000 (13:23 -0400)
When used without --content or --no-content, warn about the upcoming
transition, and suggest using one of the options, or setting
annex.synccontent.

Sponsored-by: Brett Eisenberg on Patreon
CHANGELOG
Command/Sync.hs
doc/git-annex-sync.mdwn
doc/todo/v11_changes.mdwn

index ec5bfa697e74494b58910b86d6acc737b45663f1..e43cdbccb8693d33643eab06683cc1d17e0c4dd9 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -57,8 +57,12 @@ git-annex (10.20230408) UNRELEASED; urgency=medium
     --content. With --no-pull, avoid downloading content, and with
     --no-push avoid uploading content. This was done before, but
     inconsistently.
-  * sync: Added -g as a short option for --no-content.
   * uninit: Avoid buffering the names of all annexed files in memory.
+  * sync: Started a transition to --content being enabled by default.
+    When used without --content or --no-content, warn about the upcoming
+    transition, and suggest using one of the options, or setting
+    annex.synccontent.
+  * sync: Added -g as a short option for --no-content.
 
  -- Joey Hess <id@joeyh.name>  Sat, 08 Apr 2023 13:57:18 -0400
 
index 59525befe8a7c5e0d5a5fb29925576de2d100d97..5918c6d5df98e810296ebab5822712ec5c15fda7 100644 (file)
@@ -106,8 +106,8 @@ data SyncOptions = SyncOptions
        , messageOption :: Maybe String
        , pullOption :: Bool
        , pushOption :: Bool
-       , contentOption :: Bool
-       , noContentOption :: Bool
+       , contentOption :: Maybe Bool
+       , noContentOption :: Maybe Bool
        , contentOfOption :: [FilePath]
        , cleanupOption :: Bool
        , keyOptions :: Maybe KeyOptions
@@ -126,8 +126,8 @@ instance Default SyncOptions where
                , messageOption = Nothing
                , pullOption = False
                , pushOption = False
-               , contentOption = False
-               , noContentOption = False
+               , contentOption = Just False
+               , noContentOption = Just False
                , contentOfOption = []
                , cleanupOption = False
                , keyOptions = Nothing
@@ -175,15 +175,15 @@ optParser mode desc = SyncOptions
                        )
                PullMode -> pure False
                PushMode -> pure True
-       <*> switch 
+       <*> optional (flag' True 
                ( long "content"
                <> help "transfer annexed file contents" 
-               )
-       <*> switch
+               ))
+       <*> optional (flag' True
                ( long "no-content"
                <> short 'g'
                <> help "do not transfer annexed file contents"
-               )
+               ))
        <*> many (strOption
                ( long "content-of"
                <> short 'C'
@@ -236,9 +236,11 @@ instance DeferredParseClass SyncOptions where
 
 seek :: SyncOptions -> CommandSeek
 seek o = do
+       warnSyncContentTransition o
+
        prepMerge
        startConcurrency transferStages (seek' o)
-       
+
 seek' :: SyncOptions -> CommandSeek
 seek' o = do
        let withbranch a = a =<< getCurrentBranch
@@ -1038,11 +1040,11 @@ cleanupRemote remote (Just b, _) =
 
 shouldSyncContent :: SyncOptions -> Annex Bool
 shouldSyncContent o
-       | noContentOption o = pure False
+       | fromMaybe False (noContentOption o) = pure False
        -- For git-annex pull and git-annex push, 
        -- annex.syncontent defaults to True unless set
        | operationMode o /= SyncMode = annexsynccontent True
-       | contentOption o || not (null (contentOfOption o)) = pure True
+       | fromMaybe False (contentOption o) || not (null (contentOfOption o)) = pure True
        -- For git-annex sync, 
        -- annex.syncontent defaults to False unless set
        | otherwise = annexsynccontent False <||> onlyAnnex o
@@ -1053,6 +1055,24 @@ shouldSyncContent o
                        HasGitConfig (Just c) -> return c
                        _ -> return d
 
+-- Transition started May 2023, should wait until that has been in a Debian
+-- stable release before completing the transition.
+warnSyncContentTransition :: SyncOptions -> Annex ()
+warnSyncContentTransition o
+       | operationMode o /= SyncMode = noop
+       | isJust (noContentOption o) || isJust (contentOption o) = noop
+       | not (null (contentOfOption o)) = noop
+       | otherwise = getGitConfigVal' annexSyncContent >>= \case
+               HasGlobalConfig (Just _) -> noop
+               HasGitConfig (Just _) -> noop
+               _ -> showwarning
+  where
+       showwarning = earlyWarning $
+               "git-annex sync will change default behavior to operate on"
+               <> " --content in a future version of git-annex. Recommend"
+               <> " you explicitly use --no-content (or -g) to prepare for"
+               <> " that change. (Or you can configure annex.synccontent)"
+
 notOnlyAnnex :: SyncOptions -> Annex Bool
 notOnlyAnnex o = not <$> onlyAnnex o
 
index e2023d887301b827104db8f4901bf9cc9cfe185a..8e0db80410a4cccbee9830858c1d03dc31bebeb0 100644 (file)
@@ -15,7 +15,7 @@ previously been added to the repository. Then it does the equivilant of
 [[git-annex-pull]](1) followed by [[git-annex-push]](1).
 
 However, unlike those commands, this command does not transfer annexed
-content by default. This may change in a future version of git-annex.
+content by default. That will change in a future version of git-annex,
 
 # OPTIONS
 
index 2e40f0ca9bba54ae4322682c0ce4e59a905d37fc..b9f9cd1c0be688a12ebbe15762d231c382d6811c 100644 (file)
@@ -10,3 +10,10 @@ version.
   after upgrading to the repo version that enables this. Depending on the
   timing of v11, this may need to be put in a v12 upgrade that is delayed
   some amount of time (eg 1 year) after v11.
+
+* Finish the transition of git-annex sync defaulting to --content.
+  A warning was added in May 2023 when it's run in a way that will change
+  behavior. It would be good to wait until all git-annex users have
+  gotten the version with the warning, and used it for a while,
+  before finishing the transition. This does not need to be tied to a
+  repository version change really, but it would be reasonable to do so.